При ускорении на графических процессорах мы должны отказаться от подхода «вычисления первыми». Современная производительность определяется управлением памятью: координацией выделения данных, синхронизации и оптимизации между хостом (ЦП) и устройством (ГПУ).
1. Разрыв между памятью и вычислениями
Хотя пропускная способность арифметических операций на ГПУ ($ТФЛОПС$) резко возросла, пропускная способность памяти ($ГБ/с$) увеличилась намного медленнее. Это создает разрыв, при котором блоки выполнения часто «голодают», ожидая поступления данных из видеопамяти. В результате, программирование на ГПУ часто является программированием памяти.
2. Модель крыши (Roofline)
Эта модель визуализирует связь между интенсивностью арифметических операций (FLOP/байт) и производительностью. Приложения обычно делятся на два типа:
- Ограниченные пропускной способностью памяти: Ограничены пропускной способностью (крутизной подъема).
- Ограниченные вычислительной мощностью: Ограничены пиковыми ТФЛОПС (горизонтальным потолком).
3. Налог за перемещение данных
Основным узким местом производительности редко являются математические операции — это задержка и энергозатраты при перемещении байта по шине PCIe или из памяти HBM. Высокоэффективный код ориентируется на сохранение данных в памяти и минимизирует передачу данных между хостом и устройством.